package com.esunrising.esungsc.service;

import com.esunrising.esungsc.dto.FIGLZWPZ;
import com.esunrising.esungsc.entity.BFCustomItem;
import com.esunrising.esungsc.entity.FIGLAccDocAssistance;
import com.esunrising.esungsc.entity.FIGLAccDocEntry;
import com.esunrising.esungsc.entity.FIGLAccountingDocument;
import org.springframework.http.HttpHeaders;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface GSCService {

    String getHttpBaseUrl();

    HttpHeaders getHttpHeaders();

    String callGCApi(String uri, HttpHeaders headers, Map<String, Object> bodyParam);

    String callGCApi(String uri, Map<String, Object> bodyParam);

    /**
     * 保存接口调用记录
     * @param dwbh 单位编号
     * @param orgId 账务核算组织ID
     * @param orgCode 财务核算组织编号
     * @param ledger 账务核算账簿
     * @param type 接口类型
     * @param res 接口调用结果说明，正常为“获取成功”，异常为错误信息
     */
    void saveLog(String dwbh, String orgId, String orgCode, String ledger, String type, String res);

    /**
     * 保存接口调用记录
     * @param dwbh 单位编号
     * @param orgId 账务核算组织ID
     * @param orgCode 财务核算组织编号
     * @param ledger 账务核算账簿
     * @param type 接口类型
     * @param dateTime 接口调用时间
     */
    void updateSyncTime(String dwbh, String orgId, String orgCode, String ledger, String type, LocalDateTime dateTime);

    /**
     * 更新接口全局调用时间
     * @param type 接口类型
     */
    void updateApiTime(String type);

    /**
     * 调用API接口获取GSC账务核算项目字典数据
     *
     * @param year 会计年度
     * @param hszzid 核算组织ID
     * @param lastChangedOn 获取同步日期；调用方记录获取日期，下次调用传输上次获取日期,获取此日期后的增量数据,格式: yyyy-MM-dd HH:mi:ss
     * @param endDate 获取结束日期
     * @return GSC账务核算项目字典数据
     */
    List<BFCustomItem> getApiCustomItem(String year, String hszzid, String lastChangedOn, String endDate);

    /**
     * 解析GSC账务核算项目字典数据JSON字符串
     * @param jsonStr GSC账务核算项目字典数据JSON字符串
     * @return GSC账务核算项目数组
     */
    List<BFCustomItem> parseCustomItem(String jsonStr);

    /**
     * GSC账务核算项目数组存入数据库，其中ID+YEAR重复的会覆盖
     * @param customItemList GSC账务核算项目数组
     */
    void syncCustomItemList(List<BFCustomItem> customItemList);
}
